package h_factory.d_abstract;

/**
 * Created by wug on 2016/7/11 0011.
 */
public class MainTest {
    public static void main(String[] args) {
        Hero hero = new Hero("盖伦");
        /**
         * 我们是盖伦工厂 我们专业做盖伦
         *
         * 是的就算你把护士装给他，盖伦工厂也不会穿上去的
         */
        HeroFactory heroFactory = new HeroFactoryGaren();
        /*
        Hero hero = new Hero("易");
        // 通过改变一个工厂的方式就改变了所有的具体实现类
        HeroFactory heroFactory = new HeroFactoryYi();
        */
        hero.setSkin(heroFactory.makeSkin(1));
        hero.setWeapon(heroFactory.makeWeapon(1));
        System.out.println(hero);

        System.out.println("---------------------------------");

        hero.setSkin(heroFactory.makeSkin(2));
        hero.setWeapon(heroFactory.makeWeapon(2));
        System.out.println(hero);

        /**
         * 做到这里其实 你发现其实可以使用一个专门的类来控制具体实例化哪个工厂
         * 这就是很多 东西（手机主题，qq皮肤等等。。）一键切换了整个风格的东西 就是通过这样的实现方式做的
         */

        /**
         * 这个时候你一般会问 什么时候用抽象工厂 什么时候用 工厂方法
         *
         * 参考 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html 画图说明
         * https://www.zhihu.com/question/20367734 故事很不错
         *
         */
    }
}
